package org.liquidByte.trafficMustang.androidApp.listview.row;

import java.security.InvalidParameterException;

import org.liquidByte.trafficMustang.R;
import org.liquidByte.trafficMustang.androidApp.Bindings;
import org.liquidByte.trafficMustang.androidApp.listview.adapter.RowAdapter;
import org.liquidByte.trafficMustang.androidApp.services.dto.DeslocamentoDTO;
import org.liquidByte.trafficMustang.androidApp.services.dto.UsuarioDTO;
import org.liquidByte.trafficMustang.androidApp.services.dto.TrechoDTO;

import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;

public class TrechoRow extends ModelListViewRow<TrechoDTO> implements OnClickListener {
	private TextView txtDescricaoMotorista;
	private TextView txtTaxa;
	private TextView txtSituacao;
	private ImageButton imgbEmbarcar;
	private ImageButton imgbDesembarcar;
	private ImageButton imgbCancelar;
	private ImageButton imgbLocalizacao;
	private RowActionListener<TrechoRow> embarcarActionListener;
	private RowActionListener<TrechoRow> desembarcarActionListener;
	private RowActionListener<TrechoRow> cancelarActionListener;
	private RowActionListener<TrechoRow> localizacaoActionListener;

	public TrechoRow(RowAdapter<TrechoDTO> adapter, View view) {
		super(adapter, view);
		if (view.getId() != R.layout.listview_row_trecho) {
			throw new InvalidParameterException("view is not a type of listview_row_trecho");
		}
	}

	protected TextView getTxtTaxa() {
		if (this.txtTaxa == null) {
			this.txtTaxa = (TextView) this.getView().findViewById(R.id.row_trecho_txtTaxa);
		}
		return txtTaxa;
	}

	protected TextView getTxtSituacao() {
		if (this.txtSituacao == null) {
			this.txtSituacao = (TextView) this.getView().findViewById(R.id.row_trecho_txtSituacao);
		}
		return txtSituacao;
	}

	protected TextView getTxtDescricaoMotorista() {
		if (this.txtDescricaoMotorista == null) {
			this.txtDescricaoMotorista = (TextView) this.getView().findViewById(R.id.row_trecho_txtMotorista);
		}
		return txtDescricaoMotorista;
	}
	
	protected ImageButton getImgbEmbarcar() {
		if (this.imgbEmbarcar == null) {
			this.imgbEmbarcar = this.findViewById(ImageButton.class, R.id.row_trecho_embarque);
		}
		return imgbEmbarcar;
	}

	protected ImageButton getImgbDesembarcar() {
		if (this.imgbDesembarcar == null) {
			this.imgbDesembarcar = this.findViewById(ImageButton.class, R.id.row_trecho_desembarque);
		}
		return imgbDesembarcar;
	}

	protected ImageButton getImgbCancelar() {
		if (this.imgbCancelar == null) {
			this.imgbCancelar = this.findViewById(ImageButton.class, R.id.row_trecho_cancelar);
		}
		return imgbCancelar;
	}
	
	protected ImageButton getImgbLocalizacao() {
		if (this.imgbLocalizacao == null) {
			this.imgbLocalizacao = this.findViewById(ImageButton.class, R.id.row_trecho_localizacao);
		}
		return imgbLocalizacao;
	}

	public void setEmbarcarActionListener(RowActionListener<TrechoRow> embarcarActionListener) {
		this.embarcarActionListener = embarcarActionListener;
	}

	public void setDesembarcarActionListener(RowActionListener<TrechoRow> desembarcarActionListener) {
		this.desembarcarActionListener = desembarcarActionListener;
	}

	public void setCancelarActionListener(RowActionListener<TrechoRow> cancelarActionListener) {
		this.cancelarActionListener = cancelarActionListener;
	}
	
	public void setLocalizacaoActionListener(RowActionListener<TrechoRow> listener) {
		this.localizacaoActionListener = listener;
	}

	@Override
	public void bindToView() {
		TrechoDTO trecho = (TrechoDTO) this.getModel();
		DeslocamentoDTO deslocamento = null;
		if (trecho != null) {
			deslocamento = trecho.getDeslocamento();
		}

		if (deslocamento == null) {
			this.getTxtDescricaoMotorista().setText(null);
			this.getTxtTaxa().setText(null);
			this.getImgbLocalizacao().setVisibility(View.GONE);
		} else {
			UsuarioDTO motorista = deslocamento.getMotorista();
			if (motorista == null) {
				this.getTxtDescricaoMotorista().setText(null);
				this.getImgbLocalizacao().setVisibility(View.GONE);
			} else {
				this.getTxtDescricaoMotorista().setText(motorista.getNome());
				this.getImgbLocalizacao().setVisibility(trecho.isMotoristaRastreavel() ? View.VISIBLE : View.GONE);
			}
			Bindings.currencySet(this.getTxtTaxa(), trecho.getDeslocamento().getTaxa());
		}
		if (trecho == null) {
			this.getTxtSituacao().setText(null);
			this.getImgbEmbarcar().setVisibility(View.GONE);
			this.getImgbDesembarcar().setVisibility(View.GONE);
			this.getImgbCancelar().setVisibility(View.GONE);
		} else {
			this.getTxtSituacao().setText(trecho.getSituacao());
			this.getImgbEmbarcar().setVisibility(trecho.isEmbarcavel() ? View.VISIBLE : View.GONE);
			this.getImgbDesembarcar().setVisibility(trecho.isDesembarcavel() ? View.VISIBLE : View.GONE);
			this.getImgbCancelar().setVisibility(trecho.isCancelavel() ? View.VISIBLE : View.GONE);
			
		}
	}

	@Override
	public void init() {
		this.getImgbCancelar().setOnClickListener(this);
		this.getImgbDesembarcar().setOnClickListener(this);
		this.getImgbEmbarcar().setOnClickListener(this);
		this.getImgbLocalizacao().setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		if (this.getImgbCancelar() == v) {
			if (this.cancelarActionListener != null) {
				this.cancelarActionListener.actionPerformed(this);
			}
		} else if (this.getImgbDesembarcar() == v) {
			if (this.desembarcarActionListener != null) {
				this.desembarcarActionListener.actionPerformed(this);
			}
		} else if (this.getImgbEmbarcar() == v) {
			if (this.embarcarActionListener != null) {
				this.embarcarActionListener.actionPerformed(this);
			}
		} else if (this.getImgbLocalizacao() == v) {
			if (this.localizacaoActionListener != null) {
				this.localizacaoActionListener.actionPerformed(this);
			}
		}
	}
}
